package com.haixiaoke.saas.lock.mapper;

import com.haixiaoke.saas.lock.domain.LockFace;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 锁人脸授权Mapper接口
 *
 * @author panda
 * @date 2025-04-02
 */
@Mapper
public interface LockFaceMapper {
    /**
     * 查询锁人脸授权
     *
     * @param faceId 锁人脸授权主键
     * @return 锁人脸授权
     */
    LockFace selectLockFaceByFaceId(Long faceId);

    /**
     * 查询锁人脸授权列表
     *
     * @param lockFace 锁人脸授权
     * @return 锁人脸授权集合
     */
    List<LockFace> selectLockFaceList(LockFace lockFace);

    /**
     * 新增锁人脸授权
     *
     * @param lockFace 锁人脸授权
     * @return 结果
     */
    int insertLockFace(LockFace lockFace);

    /**
     * 修改锁人脸授权
     *
     * @param lockFace 锁人脸授权
     * @return 结果
     */
    int updateLockFace(LockFace lockFace);

    int updateLockFaceByImage(LockFace lockFace);

    /**
     * 删除锁人脸授权
     *
     * @param faceId 锁人脸授权主键
     * @return 结果
     */
    int deleteLockFaceByFaceId(Long faceId);

    /**
     * 批量删除锁人脸授权
     *
     * @param faceIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteLockFaceByFaceIds(Long[] faceIds);

    /**
     * 根据锁id和用户名称查询锁人脸授权
     * @param lockId 锁id
     * @param userName 用户名称
     * @return 锁人脸授权
     */
    LockFace selectLockFaceByLockIdAndUserName(@Param("lockId") Long lockId, @Param("userName") String userName);

    /**
     * 根据开锁标识查询锁人脸授权和密码授权信息
     * @param identifications 开锁标识集合
     */
    List<LockFace> selectLockListByIdentifications(List<String> identifications);

    /**
     * 根据锁id和用户id查询锁人脸授权
     * @param lockId
     * @param userId
     * @return
     */
    LockFace selectLockFaceByLockIdAndUserId(@Param("lockId") Long lockId, @Param("userId") Long userId);

    /**
     * 批量更新锁人脸授权
     * @param list
     * @return
     */
    int updateBatchLockFace(List<LockFace> list);

    /**
     * 校验名称和手机号是否重复
     */
    List<Map<String, Object>> checkNameAndPhone(LockFace lockFace);

    /**
     * 根据用户id和身份类型标识查询锁人脸授权
     *
     * @param authRoleType
     * @param userId
     * @return
     */
    List<LockFace> selectLockFaceByAuthRoleTypeAndUserId(@Param("authRoleType") String authRoleType, @Param("userId") Long userId);

    /**
     * 根据用户id查询锁人脸授权
     * @param userId
     * @return
     */
    List<LockFace> selectLockFaceByUserId(Long userId);

    /**
     * 根据用户id删除锁人脸授权
     * @param userId
     * @return
     */
    int softDeleteLockFaceByUserId(Long userId);

    int softDeleteLockFaceByLockId(Long lockId);

    /**
     * 软删除人脸授权
     * @param faceId
     * @return
     */
    int softDeleteLockFaceByFaceId(Long faceId);

    LockFace selectLockFaceByLockIdByMainAdmin(Long lockId);

    int insertBatchLockFace(List<LockFace> lockFaceList);

    /**
     * 查询锁人脸授权及主管理员
     */
    List<LockFace> userIdRelevanceDevice(LockFace lockFace);

}
